package com.dragon.refect.bytecode;

/**
 * 方法的动态分派
 *
 * 方法的动态分配涉及到一个很重要的概念：方法的接收者。
 *
 * invokevirtual字节码指令的多态查找流程
 *
 * 比较方法重载(overload)与方法重写(overwrite),我们可以得到这个结论：
 *
 * 方法的重载是静态的，是编译期行为; 方法重写是动态的，是运行期行为。
 * @author dragon
 * @since 2019/12/9
 */
public class MyTest5 {

    public static void main(String[] args) {
        Fruit apple  = new Apple();
        Fruit orange = new Orange();

        apple.test();
        orange.test();

        apple = new Orange();
        apple.test();

        Fruit fruit = new Fruit();
        fruit.test();
    }
}

class Fruit {

    public void test() {
        System.out.println("Fruit");
    }
}

class Apple extends Fruit {

    @Override
    public void test() {
        System.out.println("Apple");
    }


}

class Orange extends Fruit {
    @Override
    public void test() {
        System.out.println("orange");
    }
}
